package com.hsc.offer;

import com.sun.scenario.effect.Merge;

/**
 * @author
 * @date 2025-06-24
 * @Description 16.输入两个单调递增的链表，输出两个链表合成后的链表，当然我们需要合成后的链表满足单调不减规则。
 * 本质就是比较两个链表的最小值
 * 假设链表1为 1 → 3 → 5，链表2为 2 → 4 → 6，合并后的结果应为 1 → 2 → 3 → 4 → 5 → 6。
 */
public class OfferTest11 {
    public static void main(String[] args) {
        // 假设链表1为 1 → 3 → 5，链表2为 2 → 4 → 6，合并后的结果应为 1 → 2 → 3 → 4 → 5 → 6。
        ListNodeB listNode1 = new ListNodeB(1);
        listNode1.next = new ListNodeB(3);
        listNode1.next.next = new ListNodeB(5);

        ListNodeB listNode2 = new ListNodeB(2);
        listNode2.next = new ListNodeB(4);
        listNode2.next.next = new ListNodeB(6);

        ListNodeB merge = Merge(listNode1, listNode2);
        System.out.println(merge);


    }

    public static ListNodeB Merge(ListNodeB list1, ListNodeB list2) {
        if (list1 != null) {
            System.out.println("开始------list1:" + list1.val + "------list2:" + list2.val);
        }
        // 严谨性判断  如果list1 为null  不用合并直接返回
        if (list1 == null) {
            System.out.println(list1);
            return list2;
        }
        // 同理 四list2 为 null 直接返回 不用合并
        if (list2 == null) {
            System.out.println(list1);
            return list1;
        }
        // 两个都不为null 的情况
        // 进行比较 确定表头
        if (list1.val < list2.val) {
            // 满足单调不减 也就是 合并后还是单调递增
            // 递归 继续比较
            list1.next = Merge(list1.next, list2);
            System.out.println("list1:" + list1.val);
            return list1;
        } else {
            list2.next = Merge(list1, list2.next);
            System.out.println("list2:" + list2.val);
            return list2;
        }
    }
}

class ListNodeB {
    int val;
    ListNodeB next = null;

    ListNodeB(int val) {
        this.val = val;
    }
}

